
package com.rabbiter.oes.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rabbiter.oes.entity.ApiResult;
import com.rabbiter.oes.entity.Student;
import com.rabbiter.oes.serviceimpl.StudentServiceImpl;
import com.rabbiter.oes.util.ApiResultHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class StudentController {

    @Autowired
    private StudentServiceImpl studentService;

    /**
     * 分页查询学生信息（带条件过滤）
     * @param page 当前页码
     * @param size 每页数据量
     * @param name 学生姓名查询条件
     * @param grade 学生年级查询条件
     * @param tel 学生电话查询条件
     * @param institute 学生学院查询条件
     * @param major 学生专业查询条件
     * @param clazz 学生班级查询条件
     * @return 分页查询结果封装对象（包含学生列表和分页信息）
     */
    @GetMapping("/students/{page}/{size}/{name}/{grade}/{tel}/{institute}/{major}/{clazz}")
    public ApiResult findAll(@PathVariable Integer page, @PathVariable Integer size,
                             @PathVariable  String name, @PathVariable String grade,
                             @PathVariable String tel, @PathVariable String institute,
                             @PathVariable String major, @PathVariable String clazz) {
        // 创建分页对象并执行分页查询
        Page<Student> studentPage = new Page<>(page,size);
        IPage<Student> res = studentService.findAll(
                studentPage, name, grade, tel, institute, major, clazz
        );
        return  ApiResultHandler.buildApiResult(200,"分页查询所有学生",res);
    }

    /**
     * 根据学生ID查询学生详情
     * @param studentId 学生唯一标识ID
     * @return 学生详细信息封装对象（成功返回200，找不到返回404）
     */
    @GetMapping("/student/{studentId}")
    public ApiResult findById(@PathVariable("studentId") Integer studentId) {
        Student res = studentService.findById(studentId);
        if (res != null) {
        return ApiResultHandler.buildApiResult(200,"请求成功",res);
        } else {
            return ApiResultHandler.buildApiResult(404,"查询的用户不存在",null);
        }
    }

    /**
     * 根据学生ID删除学生记录
     * @param studentId 需要删除的学生ID
     * @return 删除操作结果封装对象（始终返回200状态）
     */
    @DeleteMapping("/student/{studentId}")
    public ApiResult deleteById(@PathVariable("studentId") Integer studentId) {
        return ApiResultHandler.buildApiResult(200,"删除成功",studentService.deleteById(studentId));
    }

    /**
     * 更新学生密码
     * @param student 包含学生ID和新密码的学生对象（通过请求体传递）
     * @return 密码更新结果封装对象
     */
    @PutMapping("/studentPWD")
    public ApiResult updatePwd(@RequestBody Student student) {
        studentService.updatePwd(student);
        return ApiResultHandler.buildApiResult(200,"密码更新成功",null);
    }

    /**
     * 更新学生信息
     * @param student 包含更新信息的学生对象（通过请求体传递）
     * @return 更新操作结果封装对象（成功200，失败400）
     */
    @PutMapping("/student")
    public ApiResult update(@RequestBody Student student) {
        int res = studentService.update(student);
        if (res != 0) {
            return ApiResultHandler.buildApiResult(200,"更新成功",res);
        }
        return ApiResultHandler.buildApiResult(400,"更新失败",res);
    }

    /**
     * 新增学生信息
     * @param student 需要新增的学生对象（通过请求体传递）
     * @return 新增操作结果封装对象（成功200，失败400）
     */
    @PostMapping("/student")
    public ApiResult add(@RequestBody Student student) {
        int res = studentService.add(student);
        if (res == 1) {
            return ApiResultHandler.buildApiResult(200,"添加成功",null);
        }else {
            return ApiResultHandler.buildApiResult(400,"添加失败",null);
        }
    }
}
